package cronapi

import (
	"go-middle/app/admin/service/cronservice"
	"go-middle/app/common/model/cron"
	"go-middle/library/response"

	"github.com/gogf/gf/container/garray"
	"github.com/gogf/gf/net/ghttp"
	"github.com/gogf/gf/os/glog"
)

// GetList 定时任务列表
// @Tags    定时任务
// @Summary 任务列表
// @Accept   json
// @Produce  json
// @Param    body  body cron.SelectPageReq false "搜索"
// @Success 200 {object} cron.Entity "count 总数 data 列表"
// @Router /api/cron [get]
// @Security ApiKeyAuth
func GetList(r *ghttp.Request) {
	var req cron.SelectPageReq
	//获取参数
	if err := r.Parse(&req); err != nil {
		response.Error(r, err.Error(), nil)
	}
	count, list := cronservice.GetConTab(req)
	if count == 0 {
		response.SuccessList(r, count, garray.New())
	}
	response.SuccessList(r, count, list)
}

// CronAdd  添加定时任务
// @Tags    定时任务
// @Summary 添加任务
// @Accept   json
// @Produce  json
// @Param    body  body cron.ReqAdd true "添加任务"
// @Success 200 {object} response.JsonResponse
// @Router /api/cron [post]
// @Security ApiKeyAuth
func CronAdd(r *ghttp.Request) {
	var req cron.ReqAdd
	//获取参数
	if err := r.Parse(&req); err != nil {
		response.Error(r, err.Error(), nil)
	}
	err := cronservice.SaveCron(req)
	if err != nil {
		glog.Error(err)
		response.Error(r, err.Error(), nil)
	}
	response.Success(r, "操作成功", nil)
}

// CronEdit 编辑定时任务
// @Tags    定时任务
// @Summary 编辑任务
// @Accept   json
// @Produce  json
// @Param    body  body cron.ReqEdit true "修改任务"
// @Success 200 {object} response.JsonResponse
// @Router /api/cron [put]
// @Security ApiKeyAuth
func CronEdit(r *ghttp.Request) {
	var req cron.ReqEdit
	//获取参数
	if err := r.Parse(&req); err != nil {
		response.Error(r, err.Error(), nil)
	}
	err := cronservice.SaveCron(req)
	if err != nil {
		glog.Error(err)
		response.Error(r, err.Error(), nil)
	}
	response.Success(r, "操作成功", nil)
}

// CronDelete 删除定时任务
// @Tags    定时任务
// @Summary 删除任务
// @Accept   json
// @Produce  json
// @Param    body  body cron.ReqDelete true "删除任务"
// @Success 200 {object} response.JsonResponse
// @Router /api/cron [delete]
// @Security ApiKeyAuth
func CronDelete(r *ghttp.Request) {
	var req cron.ReqDelete
	//获取参数
	if err := r.Parse(&req); err != nil {
		response.Error(r, err.Error(), nil)
	}
	err := cronservice.DeleteCron(req.Ids)
	if err != nil {
		response.Error(r, "操作失败", nil)
	}
	response.Success(r, "操作成功", nil)
}

// CronRun 手动执行定时任务
// @Tags    定时任务
// @Summary 手动执行定时任务
// @Accept  multipart/form-data
// @Produce  json
// @Param   id formData number true  "任务ID"
// @Success 200 {object} response.JsonResponse
// @Router /api/cron/run [post]
// @Security ApiKeyAuth
func CronRun(r *ghttp.Request) {
	id := r.GetInt64("id")
	item := cronservice.GetCronByID(id)
	err := cronservice.RunTask(*item)
	if err != nil {
		response.Error(r, err.Error(), nil)
	}
	response.Success(r, "操作成功", nil)
}
